#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <inttypes.h>
#include <time.h>
#include <sys/file.h>// flock

#define myChkLockFileName "/tmp/myChkFileLock.txt"

// 测试:
// ./test 0
// ./test 1
// 测试结果：
// 进程互锁OK。SUB进程会等10秒才能打印lock。
// 主进程被杀死，sub进程能正常1秒打印lock。
// 主线程被杀死后再次启动，SUB进程会等10秒才能打印lock。
// 达到预期。
// 可以用flock+memshare，而不是信号量（崩溃时不好处理）+共享内存。

int main(int argsize, const char **args)
{
    if(argsize < 2)
    {
        printf("need flag,0host,1sub: ./test 1!\n");
        return -1;
    }
    int tmpflag = atoi(args[1]);
    int lockfd = open(myChkLockFileName, O_CREAT|O_RDWR, 0666);
    if(lockfd < 0)
    {
        printf("open lock file error!\n");
        return -1;
    }
    while (1)
    {
        flock(lockfd, LOCK_EX);
        printf("my lock lock!\n");
        if(tmpflag == 0)
        {
            sleep(10);
        }
        else
        {
            sleep(1);
        }
        flock(lockfd, LOCK_UN);
        printf("my lock unlock!\n");
        sleep(2);
    }
    return 0;
}
